package chapter8.poly_.dynamic;

//非常重要
//1.当调用对象方法的时候，该方法会和该对象的内存地址/运行类型绑定
//2.当调用对象属性时，没有动态绑定机制，哪里声明，哪里使用
public class DynamicBinding {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.sum());
        System.out.println(a.sum1());
    }
}

class A {//父类
    public int i = 10;

    //动态绑定机制
    public int sum() {
        return getI() + 10;//这里调用的是子类的getI()
    }

    public int sum1() {
        return i + 10;//属性没有动态绑定机制，哪里声明哪里使用。
    }

    public int getI() {
        return i;
    }
}

class B extends A {//父类
    public int i = 20;

  public int sum() {
       return getI() + 20;
   }

//    public int sum1() {
//        return getI() + 10;
//    }

    public int getI() {
        return i;
    }
}